iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
自我挑戰組

C# 和 SQL 探索之路 - 3系列 第 2

Day 2: C# Yield 關鍵字

  • 分享至 

  • xImage
  •  

在 C# 中有 foreach 語法,可以快速的列舉集合 (ex. List) 中的所有元素。

foreach 的背後,其實就是集合的類別實做了 IEnumerable 介面,即 Iterator 設計模式。讓其他人操作此類別的集合時,不必知道集合列舉的邏輯,就能一一的列舉元素。

如果要自己實作 IEnumerable 介面,就要實作 Current 屬性, Dispose()、MoveNext()、Reset() 等方法,因此可以透過 yield 精簡程式碼,寫出更直覺的語法。(仔細體會yield的甜美: yield介紹 - iT 邦幫忙)

使用 yield 的話,只需要在 IEnumerable 介面內撰寫列舉的邏輯,並加入 yield 關鍵字即可。

範例

using System;
using System.Collections;
using System.Collections.Generic;

// 自訂一個集合類別,實作 IEnumerable 介面
public class NumberCollection : IEnumerable<int>
{
    private int[] numbers = { 1, 2, 3, 4, 5 };

    // 實作 GetEnumerator 方法,使用 yield return 來簡化列舉邏輯
    public IEnumerator<int> GetEnumerator()
    {
        foreach (var number in numbers)
        {
            yield return number; // 列舉 numbers 的所有元素
        }
    }

    // 明確的 IEnumerable 方法實作
    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

public class Program
{
    public static void Main()
    {
        // 使用自訂的 NumberCollection 類別
        var collection = new NumberCollection();

        // 使用 foreach 列舉 NumberCollection 中的所有元素
        foreach (var num in collection)
        {
            Console.WriteLine(num);
        }
    }
}

其它參考資料


上一篇
Day 1: 前言 & C# Static 關鍵字
下一篇
Day 3: C# Null Reference Types
系列文
C# 和 SQL 探索之路 - 330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言